package com.wmuj.service.impl;

import com.wmuj.mapper.DeptMapper;
import com.wmuj.pojo.Dept;
import com.wmuj.service.DeptService;
import com.wmuj.exception.DepartmentHasEmployeesException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.time.LocalDateTime;
import java.util.List;

@Service
public class DeptServiceImpl implements DeptService {

  @Autowired private DeptMapper deptMapper;
  @Autowired private EmpServiceImpl empserviceImpl;

  @Override
  public List<Dept> findAll() {
    return deptMapper.findAll();
  }

  @Override
  public void delete(Integer id) {
    // 1.根据此id查询empServiceImpl里的dept_id是否有员工。
    List<Integer> empIds = empserviceImpl.findEmpIdsByDeptId(id);

    // 2.判断该empIds是否有数据，则不能直接删除。
    // 并给前端提示错误信息：对不起，当前部门下有员工，不能直接删除！
    if (!CollectionUtils.isEmpty(empIds)) {
      // 抛出一个异常传递给全局异常管理
      throw new DepartmentHasEmployeesException("对不起，当前部门下有员工，不能直接删除！");
    }
    // 3.如果该部门下没有员工，则直接删除该部门。
    deptMapper.delete(id);
  }

  @Override
  public void add(Dept dept) {
    // 补全其他基础属性
    dept.setCreateTime(LocalDateTime.now());
    dept.setUpdateTime(LocalDateTime.now());
    // 不能跟已有的部门冲突
    List<Dept> deptList = deptMapper.findAll();
    for (Dept d : deptList) {
      if (d.getName().equals(dept.getName())) {
        throw new RuntimeException("部门名称重复，请重新输入！");
      }
    }
    deptMapper.add(dept);
  }

  @Override
  public Dept findById(Integer id) {
    return deptMapper.findById(id);
  }

  @Override
  public void update(Dept dept) {
    // 更新部门名称和更新时间
    dept.setUpdateTime(LocalDateTime.now());
    deptMapper.update(dept);
  }
}
